home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 4 / MacMania 4.toast / / Demo's / Igor Demo Pro / 3 PutContentsIn Igor Pro Folder / Technical Notes / Igor Tech Notes / TN024 Complex functions / Complex TEXT next >
Text File  |  1990-10-17  |  1KB  |  104 lines

  1.  
  2. Function/D cabs(z)
  3.     Variable/D/C z
  4.     
  5.     Variable/D temp,rz,iz
  6.  
  7.     rz= abs(real(z))
  8.     iz= abs(imag(z))
  9.     if(iz > rz)
  10.         temp = rz
  11.         rz = iz
  12.         iz = temp
  13.     endif
  14.     if((rz+iz) == rz)
  15.         return rz                        | underflow
  16.     endif
  17.     
  18.     return rz*sqrt(1.0 +  (iz/rz)^2)
  19. End
  20.  
  21.  
  22. Function/C csqrt( z)
  23.     Variable/C z
  24.     
  25.     Variable/C r
  26.     Variable/D mag, t,tt
  27.  
  28.     mag = cabs(z)
  29.     if( mag  == 0 )
  30.         r = 0
  31.     else
  32.         if(real(z) > 0)
  33.             t = sqrt(0.5 * (mag + real(z)) )
  34.             r= cmplx(t,0.5 * imag(z) / t)
  35.         else
  36.             t = sqrt(0.5 * (mag - real(z)) )
  37.             if(imag(z) < 0)
  38.                 t = -t
  39.             endif
  40.             r= cmplx(0.5 * imag(z) / t,t)
  41.         endif
  42.     endif
  43.     return r
  44. End
  45.  
  46. Function/C cexp(z)
  47.     Variable/C z
  48.     
  49.     Variable expx = exp(real(z));
  50.     Return cmplx( expx * cos(imag(z)), expx * sin(imag(z)))
  51. end
  52.  
  53. Function/C cln(z)
  54.     Variable/C z
  55.     
  56.     Return cmplx( ln(cabs(z)), atan2(imag(z),real(z)))
  57. end
  58.  
  59. Function/C csin(z)
  60.     Variable/C z
  61.     
  62.     Return cmplx(sin(real(z)) * cosh(imag(z)), cos(real(z)) * sinh(imag(z)))
  63. end
  64.  
  65. Function/C ccos(z)
  66.     Variable/C z
  67.     
  68.     Return cmplx(cos(real(z)) * cosh(imag(z)), -sin(real(z)) * sinh(imag(z)))
  69. end
  70.  
  71.  
  72.  
  73. Function/D/C cpowi(a, n)     | returns   a^n where a is complex and n is an integer
  74.     Variable/D/C a
  75.     Variable/D n
  76.     
  77.     Variable/D/C p=cmplx(1,0)    | the result
  78.     
  79.     if( trunc(n)!=n )    | is n really a real integer?
  80.         return cmplx(nan,nan)        | no- can't do it
  81.     endif
  82.     
  83.     if(n == 0)
  84.         return p
  85.     endif
  86.     if(n < 0)
  87.         n = -n;
  88.         a=1/ a
  89.     endif
  90.     do
  91.         if(n %& 1)
  92.             p= p*a
  93.         endif
  94.         n /= 2
  95.         if(n != 0)
  96.             a *= a
  97.         else
  98.             break;
  99.         endif
  100.     while(1)
  101.     return p
  102. End
  103.  
  104.